<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>js布尔值之类型转换</title>
</head>
<body>
  <p>布尔值之类型转换</p>
  <ul>
    <li>隐式转换：利用其他非布尔类型进行条件判断时的判断依据：对字符串而言，除''之外全为真，对数字而言，除0之外全为真，对数组对象而言，除null之外全为真，此外，undefined、null为假</li>
    <li>显示转换：可使用Boolean()或!!来显式转换为布尔类型</li>
  </ul>
  <script>
    // 非布尔类型条件判断(默认为隐式判断)
    const num = 10, zero = 0
    const name = 'Miracle', empty = '', emptyString = ' '
    const arr = [1,2,3], emptyArray = []
    const obj = { a: 1, b: 2 }, emptyObject = {}
    let undefinedObj = undefined, nullObj = null
    if (num && name && emptyString && emptyArray && arr && emptyObject && obj) {
      console.log('非空字符串(含多个空格)，非0数字，非null(空)数组或(空)对象都为true')
    }
    if (!zero && !empty && !undefinedObj && !nullObj) {
      console.log('空字符串，0，undefined，null都为false')
    }
    // 使用Boolean()显式转化
    console.log('使用Boolean()显式转换')
    console.log(Boolean(num),Boolean(zero))                        // true,false
    console.log(Boolean(name),Boolean(emptyString),Boolean(empty)) // true,true,false
    console.log(Boolean(arr),Boolean(emptyArray))                  // true,true
    console.log(Boolean(obj),Boolean(emptyObject))                 // true,true
    console.log(Boolean(undefinedObj),Boolean(nullObj))            // false,false
    // 使用!!显式转化
    console.log('使用!!显式转换')
    console.log(!!num,!!zero)                                      // true,false
    console.log(!!name,!!emptyString,!!empty)                      // true,true,false
    console.log(!!arr,!!emptyArray)                                // true,true
    console.log(!!obj,!!emptyObject)                               // true,true
    console.log(!!undefinedObj,!!nullObj)                          // false,false
  </script>
  </body>
</html>